package com.okex.demo.service;

import com.okex.demo.model.OrderInfo;
import com.okex.demo.repository.OrderRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.List;

/**
 * 订单服务类
 * 处理订单相关的业务逻辑，包括保存、查询、删除订单等
 */
@Slf4j
@Service
public class OrderService {

    @Autowired
    private OrderRepository orderRepository;

    /**
     * 保存订单信息
     * 
     * @param orderInfo 订单信息
     * @return 保存后的订单信息
     */
    @Transactional
    public OrderInfo saveOrder(OrderInfo orderInfo) {
        log.info("保存订单信息: instId={}, side={}, posSide={}, tdMode={}, sz={}",
                orderInfo.getInstId(), orderInfo.getSide(), orderInfo.getPosSide(), 
                orderInfo.getTdMode(), orderInfo.getSz());
        return orderRepository.save(orderInfo);
    }

    /**
     * 查询所有订单
     * 
     * @return 订单列表
     */
    public List<OrderInfo> findAllOrders() {
        log.debug("查询所有订单");
        return orderRepository.findAllByOrderByCreateTimeDesc();
    }

    /**
     * 查询指定产品的订单
     * 
     * @param instId 产品ID
     * @return 订单列表
     */
    public List<OrderInfo> findOrdersByInstId(String instId) {
        log.debug("查询产品{}的订单", instId);
        return orderRepository.findByInstIdOrderByCreateTimeDesc(instId);
    }

    /**
     * 根据时间范围查询订单
     * 
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 订单列表
     */
    public List<OrderInfo> findOrdersByDateRange(Date startDate, Date endDate) {
        log.debug("查询时间范围内的订单: {} 至 {}", startDate, endDate);
        return orderRepository.findByDateRange(startDate, endDate);
    }

    /**
     * 根据产品ID和时间范围查询订单
     * 
     * @param instId 产品ID
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 订单列表
     */
    public List<OrderInfo> findOrdersByInstIdAndDateRange(String instId, Date startDate, Date endDate) {
        log.debug("查询产品{}在时间范围内的订单: {} 至 {}", instId, startDate, endDate);
        return orderRepository.findByInstIdAndDateRange(instId, startDate, endDate);
    }

    /**
     * 删除时间范围内的所有订单
     * 
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 删除的记录数
     */
    @Transactional
    public int deleteOrdersByDateRange(Date startDate, Date endDate) {
        log.info("删除时间范围内的订单: {} 至 {}", startDate, endDate);
        return orderRepository.deleteByDateRange(startDate, endDate);
    }

    /**
     * 删除指定产品和时间范围内的订单
     * 
     * @param instId 产品ID
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 删除的记录数
     */
    @Transactional
    public int deleteOrdersByInstIdAndDateRange(String instId, Date startDate, Date endDate) {
        log.info("删除产品{}在时间范围内的订单: {} 至 {}", instId, startDate, endDate);
        return orderRepository.deleteByInstIdAndDateRange(instId, startDate, endDate);
    }

    /**
     * 查询当天的所有订单
     * 
     * @return 当天的订单列表
     */
    public List<OrderInfo> findTodayOrders() {
        log.debug("查询当天的所有订单");
        return orderRepository.findTodayOrders();
    }
} 